package com.example.online_gobang.game;

import org.springframework.stereotype.Component;

import java.util.concurrent.ConcurrentHashMap;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-11-20
 * Time: 15:42
 */
// 房间管理器
@Component
public class RoomManager {
    private ConcurrentHashMap<String,Room> rooms = new ConcurrentHashMap<>();

    // 通过用户id 与房间id 维护玩家和房间之间的关系
    private ConcurrentHashMap<Integer,String>  usrIdToRoomId = new ConcurrentHashMap<>();
    public void add(Room room, int userId1,int userId2){
        // 添加一个房间到房间管理器的同时，也将两个玩家的 userId 添加到 usrIdToRoomId 中，便于维护玩家和房间之间的关系
        rooms.put(room.getRoomId(),room);
        usrIdToRoomId.put(userId1,room.getRoomId());
        usrIdToRoomId.put(userId2,room.getRoomId());
    }

    public void remove(String roomId, int userId1,int userId2){
        // 移除一个房间的同时也要同时移除两个玩家的信息
        rooms.remove(roomId);
        usrIdToRoomId.remove(userId1);
        usrIdToRoomId.remove(userId2);
    }

    public Room getByRoomId(String roomId){
        return rooms.get(roomId);
    }

    // 通过用户id 查找对应的房间
    public Room getRoomByUserId(int userId){
        String rooId = usrIdToRoomId.get(userId);
        if(rooId == null){
            // rooId == null 表示游戏房间不存在
            // userId -> roomId 映射关系不存在，直接返回 null
            return null;
        }
        return rooms.get(rooId);
    }
}
